package IHM;

import java.awt.Color;
import java.awt.Component;
import java.util.ArrayList;

import javax.swing.Box;
import javax.swing.JPanel;

import org.jdom.Element;

import Metier.Page;

/**
 * Classe gerant la zone d'apercu
 * 
 * @author Aubry Thomas
 * @author Bouchet Sylvain
 * @author Fauvel Alexis
 * @author Lessieur Jocelyn
 * @author Mathias Bastien
 * @author Teuf Antoine
 * @version 1.0
 */
public class Visu extends JPanel {

	/**
	 * L'instance de la page, permet de contenir la page affichée
	 */
	private Page page;
	
	/**
	 * Box permetant d'afficher les elements dans le visu
	 * @see Visu#getPage()
	 * @see Visu#setPage(Page)
	 */
	private Box box;
	
	/**
	 * L'instance de l'IHM de l'application
	 * @see Visu#getIhm()
	 */
	private IHM ihm;
	
	/**
	 * Couleur de fond du theme en cours, afin de mettre la couleur sur le visu
	 * @see Visu#getColorDefaut()
	 */
	private Color colorFondDefaut;

	/**
	 * Constructeur de la classe Visu
	 * 
	 * @param ihm
	 *            l'instance de l'IHM en cours
	 */
	public Visu(IHM ihm) {
		super();
		this.ihm = ihm;
		this.page = null;
		colorFondDefaut = getBackground();
		maj();
	}

	/**
	 * Permet de mettre a jour la zone d'aperçu
	 */
	public void maj() {

		VisuElement ve;
		if (page != null) {
			setBackground(page.getProjet().getTheme().getFond());
			removeAll();// vide le panel

			box = Box.createVerticalBox();
			add(box);

			ArrayList<Element> alE = page.getElementsPage();
			int index = 0;
			for (int i = 0; i < page.getElementsPage().size(); i++) {
				ve = new VisuElement(ihm, page.getElementsPage().get(i), index,
						this);
				ve.setAlignmentX(Component.CENTER_ALIGNMENT);// centre l'élément
				box.add(ve);
				index += 2;// l'index augmente de 2 car entre chaque élément il
							// y a un élément vide qui n'est pas contenu dans
							// l'arraylist
			}

			// rafraichis le panel pour voir les éléments après suppression ou ajout
			revalidate();
			repaint();
		} else {
			removeAll();
			setBackground(colorFondDefaut);
		}
	}

	/**
	 * Permet de modifier la page afficher dans l'apercu
	 * 
	 * @param p
	 *            l'instance de la Page à afficher
	 */
	public void setPage(Page p) {
		this.page = p;
		maj();
	}

	/**
	 * Permet de recuperer la Page en cours d'affichage
	 * 
	 * @return l'instance de la Page
	 */
	public Page getPage() {
		return page;
	}

	/**
	 * Permet de recuperer l'IHM
	 * 
	 * @return l'instance de l'IHM
	 */
	public IHM getIhm() {
		return ihm;
	}

	/**
	 * Permet de recuperer la couleur par defaut
	 * 
	 * @return une instance de la classe Color contenant la couleur par defaut
	 */
	public Color getColorDefaut() {
		return colorFondDefaut;
	}
}
